package com.controller;

import com.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/params")
public class ParamsController {

    /**
     * 当前请求携带参数时，SpringMVC的总控制器会帮助我们接受请求参数并解析
     * 在反射调用方法时，根据参数的名称将参数传递给我们的处理器方法进行使用
     * 基本类型和String类型的参数：
     *      请求参数名称要和方法参数名称相同，SpringMVC会自动为参数赋值
     *      如果请求参数名称和方法参数名称不相同，可以使用@RequestParam("请求参数名称")
     */
    //请求：http://localhost:8080/params/handler01?name=张三&age=18
    @RequestMapping("/handler01")
    public String handler01(@RequestParam("name") String username, int age){
        System.out.println("username:"+username+",age:"+age);
        return "success-handler01";
    }

    /**
     * 请求路径：http：//localhost:8080/params/handler02?name=zhangsan&age=23
     * pojo对象：请求参数名称要和pojo对象中的属性名称保持一致
     */
    @RequestMapping("/handler02")
    public String handler02(User user){
        System.out.println("username:"+user.getName()+",age:"+user.getAge());
        return "success-handler02";
    }

    /**
     * 请求路径：http：//localhost:8080/params/handler03?hobbys=游泳&hobbys=跑步
     * 数组：请求参数名称要和形参名称保持一致
     */
    @RequestMapping("/handler03")
    public String handler03(String hobbys[]){
        System.out.println(Arrays.toString(hobbys));
        return "success-handler03";
    }

    /**
     * 请求路径：http：//localhost:8080/params/handler04?likes=游泳&likes=跑步&likes=健身
     * 集合类型：
     *      同名请求参数需要使用@RequestParam("请求参数名称")指定参数名称
     */
    @RequestMapping("/handler04")
    public String handler04(@RequestParam("likes") List<String> likes){
        System.out.println(likes);
        return "success-handler04";
    }
}
